<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>正则表达式</title>
  <style>
    #regexp{
      font-size:14px;
    }
    #regexp .title{
      color:#777;
      font-size:24px;
      text-align:center;
    }
    #regexp .textbox{
      width:650px;
      height:150px;
      border:1px solid #ccc;
      border-radius:5px;
      padding:5px;
      resize:none;
    }
  </style>
</head>
<body>
  <div id="regexp">
    <h1 class="title">正则表达式测试工具</h1>
    <textarea id="userText" class="textbox" placeholder="输入待匹配的字符"></textarea>
    <p>
      正则表达式：<input type="text" id="userRegExp" class="textfield" placeholder=""/>
      <input type="checkbox" name="userModifier" value="i"/>忽略大小写
      <input type="checkbox" name="userModifier" value="g"/>全局匹配
      <input type="checkbox" name="userModifier" value="m"/>多行匹配
      <input type="button" id="matchingBtn" value="测试匹配">
    </p>
    <textarea id="matchingResult" class="textbox" disabled="disabled"></textarea>
  </div>
  <script>
    var userText = document.getElementById("userText")
    var userRegExp = document.getElementById("userRegExp")
    var matchingBtn = document.getElementById("matchingBtn")
    var matchingResult = document.getElementById("matchingResult")
    var userModifier = document.getElementsByName("userModifier")
    var pattern, modifier='';

    for(var i = 0, len = userModifier.length; i<len; i++){
      userModifier[i].onclick = function(){
        modifier = ''
        for(var j = 0, jlen = userModifier.length; j<jlen; j++){
          if(userModifier[j].checked){
            modifier += userModifier[j].value
          }
        }
      }
    }

    console.log(userModifier)
    matchingBtn.onclick = function(){
      if(!userText.value){
        alert('请输入待匹配的文本')
        userText.focus()
        return
      }
      pattern = new RegExp(userRegExp.value, modifier)
      console.log(pattern.exec(userText.value))
      matchingResult.value = pattern.exec(userText.value) || '没有匹配'
    }

  </script>
  <script>
    // 通过字面量
    var ar = []
    var reg = /js/
    // 通过构造函数
    var arr = new Array()
    var reg = new RegExp(/fd/)

    var str = 'I js love Js'
    var pattern = /js/ig
    //  js5_,;!@  特殊字符 . () {} 
    console.log(pattern.test(str))
    console.log(pattern.exec(str))

    /**
      \ 转义字符 /\/\//  /\\/
      \n 换行
      \t 制表符 tab键
      [] 匹配任意一个字符 若水三千只取一个字符 [a-z] [\u4e00-\u9fa5]汉字
      ^ 取反，[^js]匹配除了js外，任意字符
      . 除了换行符\n以外的所有字符，都快可以匹配
      \w 匹配任意一个字母数字下划线 [a-zA-Z0-9]
      \W 匹配任意一个字母数字下划线 [^a-zA-Z0-9]
      \d 匹配任意一个数字 [0-9]
      \D 匹配任意一个非数字数字 [^0-9]
      \s 空格或制表符 
      {2} 量词  /\d{1,2}/ 大于等于1小于等于2 {1,}
      ? 匹配0次或一次 {0,1}
      + 大于等于1 {1,}
      * 0次或者更多 
    */
    // var str = '1.html\n2.css\n3.js'
    // var pattern = /\n/
    
    // var str = '   js'
    // var pattern = /\t/
    // console.log(pattern.exec(str))

    console.log('---------字符类---------')
    var str = ' a'
    var pattern = /[\s]/
    console.log(pattern.exec(str))
    console.log('--------量词--------')
    var str = '肯德基豪华午餐$15.5'
    var pattern = /\d+\.?\d*/
    console.log(pattern.exec(str))

    console.log('----------选择、分组和引用-----------')
    // var str = 'html js'
    // var pattern = /html|css|js/
    // console.log(pattern.exec(str))

    // var str = 'abcd'
    // var pattern = /(ab)c/
    // console.log(pattern.exec(str))

    // var str = 'abcd'
    // var pattern = /(?:ab)c/
    // console.log(pattern.exec(str))

    // var str = 'abcd'
    // var pattern = /((ab)(c))/
    // console.log(pattern.exec(str))

    // var str = 'ab cd ab'
    // var pattern = /(ab) cd \1/
    // console.log(pattern.exec(str))

    // var str = '<p><a>这是一段文字</a></p>'
    // var pattern = /<([a-zA-Z]+)>(.*)<\/\1>/
    // console.log(pattern.exec(str))

    var str = '1101a19120'
    var pattern = /\D/
    console.log(pattern.exec(str))
    if(!pattern.test(str)){
      console.log('全是数字')
    } else {
      console.log('不全是数字')
    }

    console.log(typeof [] == 'object')
  </script>
</body>
</html>